package com.zjj.learn.designmodel.work.composite;

public class CompositeTest {


    public static void main(String[] args) {
        File file1 = new File("file1.txt");
        File file2 = new File("file2.txt");
        Directory dir1 = new Directory("dir 1");
        Directory dir2 = new Directory("dir 2");
        //在 dir2 中保存 file2，在 dir1 中 保存 file2 和 dir2.
        dir1.addComponents(dir2);
        dir1.addComponents(file1);
        dir2.addComponents(file2);
        //将 dir1 中的文件和文件夹全部输出
        dir1.display();

    }


    /**
     * 组合模式
     * 组合模式是一种结构型模式
     *
     *
     * 组合模式是一种结构型设计模式，它允许客户端以统一的方式处理对象的集合和单个对象。在组合模式中，组合对象的结构与其内部对象的结构相同。
     * 举个例子，我们可以使用组合模式来表示文件系统中的目录和文件。每个目录可以包含子目录或文件，而文件则无法包含其它文件或目录。
     *
     * 在这个例子中，FileSystemComponent是组合模式的组件接口，File和Directory是具体实现。
     *     File表示一个文件，而Directory表示一个目录。Directory可以包含子目录或文件，当调用display()方法时，
     *    它会递归遍历并打印出其内部所有的组件（包括子目录和文件）。
     *
     *
     * 使用组合模式来表示文件系统可以使代码易于管理和维护，并使客户端能够以统一的方式处理目录和文件。
     * 这样的设计还可以通过简单地添加一个新的文件或目录来扩展文件系统。
     *
     * 具体案例请见：{@link com.zjj.learn.designmodel.work.composite}
     **/
}
